home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / aminet / util / gnu / emacs_src_18_58.lha / emacs-18.58 / src / amiga_serial.c < prev    next >
C/C++ Source or Header  |  1992-08-16  |  2KB  |  73 lines

  1. #include <exec/types.h>
  2. #include <devices/serial.h>
  3. #include <stdio.h>
  4. #include <internal/devices.h>
  5.  
  6. #include <proto/exec.h>
  7. #include <proto/dos.h>
  8.  
  9. #include "amiga.h"
  10.  
  11. static struct MsgPort  *SerReadPort;
  12. static struct IOExtSer *SerReadRequest, *SerWriteRequest;
  13. static char ser_inbuf[2];
  14. char *far serial_device = "serial.device";
  15. long serial_unit;
  16.  
  17. void init_amiga_serial(void)
  18. {
  19.     if ((SerWriteRequest = (struct IOExtSer *)
  20.      _device_open(serial_device, serial_unit, 0L,
  21.               0L, 0, sizeof(struct IOExtSer))) &&
  22.     (SerReadPort = CreateMsgPort()) &&
  23.     (SerReadRequest  = (struct IOExtSer *)CreateIORequest(SerReadPort, sizeof (struct IOExtSer))))
  24.     {
  25.     SerReadRequest->IOSer.io_Device = SerWriteRequest->IOSer.io_Device;
  26.     SerReadRequest->IOSer.io_Unit = SerWriteRequest->IOSer.io_Unit;
  27.     ser_inbuf[1]=0;
  28.     SerReadRequest->IOSer.io_Command = CMD_READ;
  29.     SerWriteRequest->IOSer.io_Command = CMD_WRITE;
  30.     SerReadRequest->IOSer.io_Length = 1;
  31.     SerReadRequest->IOSer.io_Data = &ser_inbuf[0];
  32.     SendIO(SerReadRequest);
  33.  
  34.     inputsig |= 1L << SerReadPort->mp_SigBit;
  35.     }
  36.     else _fail("No memory or serial.device missing");
  37. }
  38.  
  39. void cleanup_amiga_serial(void)
  40. {
  41.     if (SerReadRequest)
  42.     {
  43.     AbortIO(SerReadRequest);
  44.     WaitIO(SerReadRequest);
  45.     DeleteIORequest(SerReadRequest);
  46.     }
  47.     if (SerReadPort) DeletePort(SerReadPort);
  48.     _device_close(SerWriteRequest);
  49. }
  50.  
  51. void check_serial(int force)
  52. {
  53.     while (CheckIO(SerReadRequest))
  54.     {
  55.     int c = ser_inbuf[0];
  56.     SendIO(SerReadRequest);
  57.     enque(c, FALSE);
  58.     }
  59. }
  60.  
  61. void serial_puts(char *str, int len)
  62. {
  63.  
  64.     SerWriteRequest->IOSer.io_Length = len;
  65.     SerWriteRequest->IOSer.io_Data = str;
  66.     DoIO(SerWriteRequest);
  67. }
  68.  
  69. unsigned long serial_baud_rate(void)
  70. {
  71.     return SerWriteRequest->io_Baud;
  72. }
  73.